package org.netbeans.gradle.javaee.models; import java.io.File; import java.util.Set; import org.gradle.api.Project; import org.gradle.api.file.SourceDirectorySet; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.SourceSet; import org.jtrim.utils.ExceptionHelper; import org.netbeans.gradle.model.api.ProjectInfoBuilder2; /** * * @author ed */ enum NbJpaModelBuilder implements ProjectInfoBuilder2<NbJpaModel>{ INSTANCE; @Override public NbJpaModel getProjectInfo(Object project) { return getProjectInfo((Project)project); } private NbJpaModel getProjectInfo(Project project) { NbJpaModel returnValue = null; try { Builder builder = new Builder(project); if (builder.getPersistenceXmlFile() != null) { returnValue = new NbJpaModel( builder.getPersistenceXmlFile(), builder.getJavaSourceDirs() ); } } catch (Exception ex) { throw ExceptionHelper.throwUnchecked(ex); } return returnValue; } @Override public String getName() { return getClass().getName(); } private static class Builder { private final Project project; //private final SourceSetMethods sourceSetMethods; //private final SourceDirectorySetMethods sourceDirectorySetMethods; private String persistenceXmlFile; private Iterable<File> javaSourceDirs; Builder(Project project) throws Exception { this.project = project; init(); } String getPersistenceXmlFile() { return persistenceXmlFile; } Iterable<File> getJavaSourceDirs() { return javaSourceDirs; } private void init() throws Exception { JavaPluginConvention java = project.getConvention().findPlugin(JavaPluginConvention.class); if (java == null) { return; } for (SourceSet sourceSet : java.getSourceSets()) { SourceDirectorySet resourceDirectorySet = sourceSet.getResources(); Set<File> resourceDirectories = resourceDirectorySet.getSrcDirs(); for (File resourceDirectory : resourceDirectories) { File metaInfDir = new File(resourceDirectory, "META-INF"); if (metaInfDir.exists()) { File persistenceXmlFileObj = new File(metaInfDir, "persistence.xml"); if (persistenceXmlFileObj.exists()) { persistenceXmlFile = persistenceXmlFileObj.getCanonicalPath(); break; } } } if (persistenceXmlFile != null) { SourceDirectorySet allJavaDirectorySet = sourceSet.getAllJava(); javaSourceDirs = allJavaDirectorySet.getSrcDirs(); break; } } } } }